package com.edais.persistence;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.edais.domain.GetUserInfo;
import com.edais.domain.IcoUserFuncInfo;
import com.edais.domain.MobileValidate;
import com.edais.domain.NoticeInfo;
import com.edais.domain.User;
import com.edais.domain.UserAccountDetail;
import com.edais.domain.UserInfo;

public interface UserMapper {
	/**
	 * 用户登录检查
	 * 
	 * @return List<GetUserInfo>
	 */
	List<GetUserInfo> loginCheck(@Param("mobile") String mobile, @Param("password") String password,
			@Param("type") String type);

	/**
	 * 用户注册（用户主表）
	 * 
	 * @return
	 */
	void addUser(User user);

	/**
	 * 用户注册（用户信息表）
	 * 
	 * @return
	 */
	void addUserInfo(UserInfo userInfo);

	/**
	 * 密码重设
	 * 
	 * @return
	 */
	void resetPsw(@Param("mobile") String mobile, @Param("newPsw") String newPsw, @Param("type") String type);

	/**
	 * 密码重设
	 * 
	 * @return
	 */
	void resetPswCash(@Param("mobile") String mobile, @Param("newPsw") String newPsw, @Param("type") String type);

	/**
	 * 获取用户信息
	 * 
	 * @return String
	 */
	User getUserByParm(Map<String, Object> map);

	/**
	 * 获取密码
	 * 
	 * @return String
	 */
	User getUserDetail(String userID);


	/**
	 * 获取用户账户详情
	 * 
	 * @return String
	 */
	UserAccountDetail getUserAccountDetail(@Param("id") String userID);

	/**
	 * 密码重设
	 * 
	 * @return
	 */
	void resetPswById(@Param("newPsw") String newPsw, @Param("id") String id, @Param("oldPsw") String oldPsw);

	/**
	 * 根据用户id取得用户详情
	 * 
	 * @return
	 */
	UserInfo getUserInfo(String userId);
	
	/**
	 * 验证码保存
	 * 
	 * @return
	 */
	void saveRandomCode(MobileValidate mobileValidate);
	
	Integer getChannelId(String channelName);
	
	/**
	 * 获取渠道信息
	 * @param channelName
	 * @return
	 */
	Map<String, Object> getChannelInfo(@Param("channelName") String channelName);
	
	void updateToBeLender(@Param("allowLend") String allowLend, @Param("id") String id);
	
	String getUserNickNameSeqNextVal();
	int getUserNotMeByInviteCode(@Param("invitationCode") String invitationCode, @Param("id") String id);
	/**
	 * 查询邀请码在用户表中的个数
	 * */
	int getInviteCodeCount(String invitationCode);
	
	void updateInvitationCode(@Param("invitationCode") String invitationCode, @Param("userId") String userId);
	
	void updateLastLoginTime(@Param("id") String userId, @Param("ip") String ip);
	
	User getInviterInfo(String invitationCode);
	
	/** 获取系统参数配置 */
	String getSystemSettingValue(String key) throws Exception;
	
	/** 根据特定的name得到参数表中对应的协议编号 */
	List<Map<String, String>>  getSysSettByAgreementNo() throws Exception;
	
	/**
	 * 更改头像
	 * */
	void modifySculpture(Map<String, Object> map);
	
	int checkIdCardIsExist(Map<String, Object> map);
	
	int updSinaIdcardValidate(Map<String, Object> map);
	
	void getInvitationCode(Map<String, Object> map);
	
	//更新用户信息
	void updUser(Map<String, Object> map);
	void updUserInfo(Map<String, Object> map);
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	 * 手机是否存在检查 
	 * 
	 * @return int
	 */
	int phoneIsExisted(String mobile);
	
	/**
	 * 查询短信发送记录表
	 */
	Map querySendMesRec(Map<String, Object> map);
	
	/**
	 * 查询短信模版
	 * @param map
	 * @return
	 */
	Map queryTemplate(Map<String, Object> map);
	

	/**
	 * 添加短信发送记录表
	 * @param map
	 * @return
	 */
	void addSendMsgRec(Map<String, Object> map);
	
	/**
	 * 短信标志设为无效
	 * @param map
	 */
	void setInvalidFlag(Map<String, Object> map);
	
	Date querySysDate();
	
	/**
	 * 连连支付后更新t_user表数据
	 */
	void updateUserInfoAfterLLPayAuth(User user);
	
	/**
	 * 连连支付后更新user_info表数据
	 */
	void updateUserIdCardAfterLLPayAuth(UserInfo userInfo);
	/**
	 * 创建主账户后更新is_create_actt字段
	 * @param user
	 */
	void updateUserIsCreateAcctAfterLLPayAuth(User user);

	/***
	 * 删除微信userid绑定关系
	 * @param userId
	 * @return
	 * @throws Exception
	 */
	int deleteWeixinBingding(String userId);
	/***
	 * 查询该手机号的密码
	 * @param map
	 * @return
	 */
	String queryPassword(Map<String, Object> map);
	
	/***
	 * 根据userId查询用户密码
	 * @param map
	 * @return
	 */
	String getPWDByUserId(Map<String, String> map);
	
	/**
	 * 根据身份证号和手机号查询是否存在信息
	 * @param map
	 * @return
	 */
	UserInfo queryUserInfoByIDCardAndMobile(Map<String, Object> map);

	/***
	 * 查询该手机号的密码
	 * @param querMap
	 * @return
	 */
	String getUserPassword(String userName);
	
	/***
	 * 查询密码输入错误剩余次数 
	 * @param userName
	 * @return
	 */
	int getLoginErrorTime(String userName);
	/***
	 * 查询密码输入错误剩余次数 
	 * @param userName
	 * @return
	 */
	void updateLoginErrorTime(String userName);
	/**
	 * 恢复该用户密码输入次数超限
	 * @param userName
	 */
	void updateLoginErrorTimeBack(String userName);
	/**
	 * 恢复该用户短信验证码使用次数
	 * @param userName
	 */
	void updateJudgeCaptchaTime(Map<String, Object> querMap);
	/**
	 * 增加该用户当日发送短信次数
	 * @param userName
	 */
	void addJudgeCaptchaTime(Map<String, Object> querMap);
	
	/**
	 * 查询总菜单功能定制表数据
	 * @param userId
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncList();
	/**
	 * 查询个人菜单功能定制表数据
	 * @param requestMap
	 * @return
	 */
	List<IcoUserFuncInfo> getUserIcoFuncList(String userId);

	/**
	 * 发布个人菜单功能定制表数据
	 * @param userId
	 * @param icoFuncId
	 */
	void addUserIcoFuncList(Map<String, String> requestMap);
	/**
	 * 删除个人菜单功能定制表数据
	 * @param userid
	 */
	void deleteUserIcoFuncSort(@Param("userid")String userid);
	
	/**
	 *通过参数查询总菜单功能定制表数据
	 * @param userId
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncListByParams(@Param("userid")String userId);

	String getSysSettingHtmlInfo(String name)throws Exception;
	
	/**
	 * 手机是否存在检查 
	 * 
	 * @return int
	 */
	int checkIsGiveWelfare(Map<String, Object> map);
	/**
	 * app滚动公告信息取信息system_setting(新的方式)
	 */
	NoticeInfo getSystemSettingInfoNew(Map<String, Object> map);

	/**
	 * 查询个人菜单功能定制表数据（微信）
	 * @param userId
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncListForwx(String userId);
	
	/**
	 * 取得菜单功能定制表数据（更多）
	 */
	IcoUserFuncInfo getIcoFuncGd();

	/**
	 * 查询总菜单功能定制表数据（微信）
	 * @param
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncListWx();

	/**
	 * 根据参数查询总菜单功能定制表数据（老版本）
	 * @param
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncListOld(String userId);

	/**
	 * 查询默认总菜单功能定制表数据（老版本）
	 * @param
	 * @return
	 */
	List<IcoUserFuncInfo> getAllIcoFuncListDefaultOld();

	/**
	 * 获取数据库系统时间
	 * @return
	 * @throws Exception
	 */
	public Date getSysdate();

	int validPasswd(Map<String, Object> params);

	/**
	 * 查询快捷菜单项
	 * @param id
	 * @return
	 */
	IcoUserFuncInfo queryIcoFuncInfo(Long id);
}

